/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import java.util.List;
import dao.*;
import model.VeiculoBean;
import dao.ControladorDAOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dao.Conexao;

/**
 *
 * @author
 */
public class VeiculoDAOImpl implements VeiculoDAO {

    private Connection conn;

    public VeiculoDAOImpl() throws ControladorDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new ControladorDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    //METODO UTILIZADO PARA ATUALIZAR VEICULO NA TABELA
    public void atualizarVeiculo(VeiculoBean veiculo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado!");
        }
        try {
            String sql = "UPDATE veiculo SET modelo=?, cilindradas=?, precodiaria=?, placa=?";

            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.setString(2, veiculo.getCilindradas());
            ps.setString(3, veiculo.getPrecoDiaria());
            ps.setString(4, veiculo.getPlaca());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao atualizar veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

        //METODO CRIADO PARA EXCLUIR VEICULO DA TABELA
         

     public void excluirVeiculo(VeiculoBean veiculo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado!");
        }
        try {
            String sql = "DELETE FROM veiculo WHERE modelo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao excluir veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    public void salvarVeiculo(VeiculoBean veiculo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado");
        }
        try {
            String sql = "INSERT INTO veiculo(modelo, cilindradas, precodiaria, placa) VALUES (?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.setString(2, veiculo.getCilindradas());
            ps.setString(3, veiculo.getPrecoDiaria());
            ps.setString(4, veiculo.getPlaca());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao salvar veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    public VeiculoBean procurarVeiculo(String modelo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;

        try {
            String sql = "SELECT * FROM veiculo WHERE modelo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, modelo);
            rs = ps.executeQuery();
            VeiculoBean veiculo = null;

            if (!rs.next()) {
                veiculo = new VeiculoBean("null", "", "", "");
            } else {
                modelo = rs.getString("modelo");
                String cilindradas = rs.getString("cilindradas");
                String precoDiaria = rs.getString("precodiaria");
                String placa = rs.getString("placa");
            }
            return veiculo;
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao procurar veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public List todosCarros() throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;

        try {
            String sql = "Select * FROM veiculo";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<VeiculoBean> listVeiculos = new ArrayList<VeiculoBean>();
            while (rs.next()) {
                String modelo = rs.getString("modelo");
                String cilindradas = rs.getString("cilindradas");
                String precoDiaria = rs.getString("precodiaria");
                String placa = rs.getString("placa");
                listVeiculos.add(new VeiculoBean(modelo, cilindradas, precoDiaria, placa));
            }
            return listVeiculos;
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao listar os veiculos" + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    //TODO IMPLEMENTAR OS MÉTODOS ABAIXO
    //Vinícius, 07/10/2011
    
    public void editar(VeiculoBean veiculo) throws ControladorDAOException {
         PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado!");
        }
        try {
            String sql = "DELETE FROM veiculo WHERE modelo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao excluir veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    //@Override
    public void excluir(VeiculoBean veiculo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado!");
        }
        try {
            String sql = "DELETE FROM veiculo WHERE modelo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao excluir veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }


    //@Override
    public void salvar(VeiculoBean veiculo) throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;

        if (veiculo == null) {
            throw new ControladorDAOException("Nenhum veiculo foi informado");
        }
        try {
            String sql = "INSERT INTO veiculo(modelo, cilindradas, precodiaria, placa) VALUES (?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, veiculo.getModelo());
            ps.setString(2, veiculo.getCilindradas());
            ps.setString(3, veiculo.getPrecoDiaria());
            ps.setString(4, veiculo.getPlaca());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao salvar veiculo" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
        
    }

    //@Override
    public List listarVeiculos() throws ControladorDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;

        try {
            String sql = "Select * FROM veiculo";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<VeiculoBean> listVeiculos = new ArrayList<VeiculoBean>();
            while (rs.next()) {
                String modelo = rs.getString("modelo");
                String cilindradas = rs.getString("cilindradas");
                String precoDiaria = rs.getString("precodiaria");
                String placa = rs.getString("placa");
                listVeiculos.add(new VeiculoBean(modelo, cilindradas, precoDiaria, placa));
            }
            return listVeiculos;
        } catch (SQLException e) {
            throw new ControladorDAOException("Erro ao listar os veiculos" + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
}
